package configuration

var Configuration struct {
	Debug  bool `mapstructure:"debug"` // 是否启用调试模式
	Logger struct {
		Base struct {
			Level      string   `mapstructure:"level"`       // 日志级别, 可选值: debug, info, warn, error
			Outputs    []string `mapstructure:"outputs"`     // 日志输出, 可选值: stdout, stderr, 或文件路径
			MaxSize    int      `mapstructure:"max_size"`    // 最大日志文件大小, 单位: MB
			MaxAge     int      `mapstructure:"max_age"`     // 最大日志文件保存时间, 单位: 天
			MaxBackups int      `mapstructure:"max_backups"` // 最大日志文件备份数量
		} `mapstructure:"base"` // 基础配置
		CustomizeWriter struct {
			Feishu struct {
				Enable  bool   `mapstructure:"enable"`  // 是否启用飞书
				Level   string `mapstructure:"level"`   // 飞书日志级别, 可选值: debug, info, warn, error
				Webhook string `mapstructure:"webhook"` // 飞书 webhook
			} `mapstructure:"feishu"` // 飞书配置
		} `mapstructure:"customize_writer"` // 自定义日志写入器配置
	} `mapstructure:"logger"` // 日志配置
	Database struct {
		Mysql struct {
			Dsn      string `mapstructure:"dsn"` // DSN连接字符串
			ConnPool struct {
				Enable          bool `mapstructure:"enable"`             // 是否启用连接池
				MaxIdleConn     int  `mapstructure:"max_idle_conn"`      // 最大空闲连接数
				MaxOpenConn     int  `mapstructure:"max_open_conn"`      // 最大打开连接数
				MaxIdleLifeTime int  `mapstructure:"max_idle_life_time"` // 最大空闲连接时间, 单位: 分钟
			} `mapstructure:"conn_pool"` // 连接池配置
		} `mapstructure:"mysql"` // mysql配置
	} `mapstructure:"database"` // 数据库配置
	Cache struct {
		Prefix string `mapstructure:"prefix"` // 缓存键前缀
		Redis  struct {
			Enable          bool   `mapstructure:"enable"`             // 是否启用redis
			Addr            string `mapstructure:"addr"`               // 地址
			Password        string `mapstructure:"password"`           // 密码
			DB              int    `mapstructure:"db"`                 // 数据库
			MaxIdleConn     int    `mapstructure:"max_idle_conn"`      // 最大空闲连接数
			MaxOpenConn     int    `mapstructure:"max_open_conn"`      // 最大打开连接数
			MaxIdleLifeTime int    `mapstructure:"max_idle_life_time"` // 最大空闲连接时间, 单位: 分钟
		} `mapstructure:"redis"` // redis配置
	} `mapstructure:"cache"` // 缓存配置
	Storage struct {
		Prefix         string            `mapstructure:"prefix"`          // 全局存储路径前缀
		PreDeleteLife  int               `mapstructure:"pre_delete_life"` // 预删除生命周期，预删除标记之后，文件对象将保留指定时间后彻底删除, 单位: 天
		ProviderPolicy string            `mapstructure:"provider_policy"` // 存储提供商策略, 可选值: first(第一个激活的提供商), random(随机一个激活的提供商)
		Providers      []StorageProvider `mapstructure:"providers"`       // 存储提供商配置
	} `mapstructure:"storage"` // 存储配置
	Sms struct {
		Template struct {
			PersonLoginCode struct {
				TemplateCode string `mapstructure:"template_code"` // 模板代码
				Params       struct {
					Code string `mapstructure:"code"` // 验证码
				} `mapstructure:"params"` // 模板参数配置
			} `mapstructure:"person_login_code"` // 个人登录验证码模板
		} `mapstructure:"template"` // 模板配置
		Providers []SmsProvider `mapstructure:"providers"` // 短信提供商配置
	} `mapstructure:"sms"` // 短信配置
	Smtp struct {
		ProviderPolicy string         `mapstructure:"provider_policy"` // 提供商策略, 可选值: first(第一个激活的提供商), random(随机一个激活的提供商)
		Providers      []SmtpProvider `mapstructure:"providers"`       // smtp提供商配置
	} `mapstructure:"smtp"` // smtp配置
	Server struct {
		Http struct {
			Example struct {
				Listen            string   `mapstructure:"listen"`            // 监听地址, 格式: ip:port, 默认: ":8000"
				GinTrustedProxies []string `mapstructure:"trusted_proxies"`   // 可信代理
				UnderMaintenance  bool     `mapstructure:"under_maintenance"` // 是否启用维护模式
			} `mapstructure:"example"` // example服务器配置
		} `mapstructure:"http"` // http服务器配置
	} `mapstructure:"server"` // 服务器配置
	Sentry struct {
		Enable bool   `mapstructure:"enable"` // 是否启用sentry中间件
		Dsn    string `mapstructure:"dsn"`    // sentry服务器dsn字符串
	} `mapstructure:"sentry"` // sentry配置
}

type StorageProvider struct {
	Protocol string `mapstructure:"protocol"`  // 提供商协议, 可选值: s3v1/s3v2/minio
	Name     string `mapstructure:"name"`      // 提供商名称
	Enable   bool   `mapstructure:"enable"`    // 是否激活
	IsPublic bool   `mapstructure:"is_public"` // 是否公开
	Cdn      struct {
		Enable bool   `mapstructure:"enable"` // 是否启用cdn
		Domain string `mapstructure:"domain"` // cdn域名
	} `mapstructure:"cdn"` // cdn配置
	S3V1 struct {
		Endpoint                string `mapstructure:"endpoint"`                  // 端点
		Region                  string `mapstructure:"region"`                    // 区域
		AccessKey               string `mapstructure:"access_key"`                // 访问密钥
		SecretKey               string `mapstructure:"secret_key"`                // 密钥
		Bucket                  string `mapstructure:"bucket"`                    // 桶
		DisableComputeChecksums bool   `mapstructure:"disable_compute_checksums"` // 禁用计算校验和
		DisableSSL              bool   `mapstructure:"disable_ssl"`               // 禁用ssl
		DisablePathStyle        bool   `mapstructure:"disable_path_style"`        // 禁用路径样式
	} `mapstructure:"s3v1"` // s3v1配置
	S3V2 struct {
		Endpoint         string `mapstructure:"endpoint"`           // 端点
		Region           string `mapstructure:"region"`             // 区域
		AccessKey        string `mapstructure:"access_key"`         // 访问密钥
		SecretKey        string `mapstructure:"secret_key"`         // 密钥
		Bucket           string `mapstructure:"bucket"`             // 桶
		DisablePathStyle bool   `mapstructure:"disable_path_style"` // 禁用路径样式
	} `mapstructure:"s3v2"` // s3v2配置
	Minio struct {
		Endpoint  string `mapstructure:"endpoint"`   // 端点
		Region    string `mapstructure:"region"`     // 区域
		AccessKey string `mapstructure:"access_key"` // 访问密钥
		SecretKey string `mapstructure:"secret_key"` // 密钥
		Bucket    string `mapstructure:"bucket"`     // 桶
		UseSSL    bool   `mapstructure:"use_ssl"`    // 使用ssl
	} `mapstructure:"minio"` // minio配置
}

type SmsProvider struct {
	Name          string `mapstructure:"name"`   // 提供商名称
	Type          string `mapstructure:"type"`   // 提供商类型, 可选值: aliyun
	Enable        bool   `mapstructure:"enable"` // 是否激活
	TemplateCodes []struct {
		TemplateCode string            `mapstructure:"template_code"` // 模板代码
		Params       map[string]string `mapstructure:"params"`        // 参数配置
	} `mapstructure:"template_codes"` // 支持的模板代码字典表，值为模板内参数的映射表
	AliYun struct {
		AccessKey string `mapstructure:"access_key"` // 访问密钥
		SecretKey string `mapstructure:"secret_key"` // 密钥
		SignName  string `mapstructure:"sign_name"`  // 签名名称
	} `mapstructure:"aliyun"` // aliyun配置
}

type SmtpProvider struct {
	Name   string `mapstructure:"name"`   // 提供商名称
	Type   string `mapstructure:"type"`   // 提供商类型, 可选值: smtp
	Enable bool   `mapstructure:"enable"` // 是否激活
	Smtp   struct {
		Host string `mapstructure:"host"` // 主机
		Port int    `mapstructure:"port"` // 端口
		User string `mapstructure:"user"` // 用户
		Pass string `mapstructure:"pass"` // 密码
		From string `mapstructure:"from"` // 发件人
	} `mapstructure:"smtp"` // smtp配置
}
